package com.stefanini.pe.bbva.iivs.in.bo;

import java.util.Iterator;
import java.util.List;

import com.stefanini.pe.bbva.iivs.in.bo.iface.SolicitudService;
import com.stefanini.pe.bbva.iivs.in.dao.iface.HistSolicitudDAO;
import com.stefanini.pe.bbva.iivs.in.dao.iface.SolicitudDAO;
import com.stefanini.pe.bbva.iivs.in.dao.iface.SolicitudOperBanDAO;
import com.stefanini.pe.bbva.iivs.in.to.HistSolicitud;
import com.stefanini.pe.bbva.iivs.in.to.OperacionBancaria;
import com.stefanini.pe.bbva.iivs.in.to.Solicitud;
import com.stefanini.pe.bbva.iivs.in.to.SolicitudOperBanKey;

public class SolicitudServiceImpl implements SolicitudService{
	private SolicitudDAO solicitudDAO; 
	private HistSolicitudDAO histSolicitudDAO;
	private SolicitudOperBanDAO solicitudOperBanDAO;
	
	public SolicitudServiceImpl(SolicitudDAO solicitudDAO,HistSolicitudDAO histSolicitudDAO,SolicitudOperBanDAO solicitudOperBanDAO ){
		this.solicitudDAO = solicitudDAO;		
		this.histSolicitudDAO = histSolicitudDAO;
		this.solicitudOperBanDAO = solicitudOperBanDAO;
	}
	
	public int deleteByPrimaryKey(String codSoli) {
		return this.solicitudDAO.deleteByPrimaryKey(codSoli);
	}

	public void insert(Solicitud record) {
		this.solicitudDAO.insert(record);
	}

	public void insertSelective(Solicitud record) {
		this.solicitudDAO.insertSelective(record);
	}

	public Solicitud selectByPrimaryKey(String codSoli) {
		return this.solicitudDAO.selectByPrimaryKey(codSoli);
	}

	public int updateByPrimaryKey(Solicitud record) {
		return this.solicitudDAO.updateByPrimaryKey(record);
	}

	public int updateByPrimaryKeySelective(Solicitud record) {
		return this.solicitudDAO.updateByPrimaryKeySelective(record);
	}
	
	public List selectDynamicWhere(Solicitud solicitud) {
		return this.solicitudDAO.selectDynamicWhere(solicitud);
	}
	
	public List selectDynamicWhereLike(Solicitud solicitud) {		
		List lista= this.solicitudDAO.selectDynamicWhereLike(solicitud);		
		for (Iterator iterator = lista.iterator(); iterator.hasNext();) {
			Solicitud object = (Solicitud) iterator.next();
			object.setOperacionesBancarias("");
			SolicitudOperBanKey solicitudOperBanKey = new SolicitudOperBanKey();
			solicitudOperBanKey.setCodSoli(object.getCodSoli());
			List ListaOper = this.solicitudOperBanDAO.selectOperacionesBancariasBySolicitud(solicitudOperBanKey);
			
			int i=0;
			for (Iterator iterator2 = ListaOper.iterator(); iterator2.hasNext();) {
				 SolicitudOperBanKey object2 = (SolicitudOperBanKey) iterator2.next();
				 		if (i==0) {
					 	object.setOperacionesBancarias(object2.getDesOperBan());
						}else{
						object.setOperacionesBancarias(object.getOperacionesBancarias()+" / "+ object2.getDesOperBan());
						}
					i++;			 
			}				
		} 		
		return lista;
	}
	public String selectNextPK() {
		return this.solicitudDAO.selectNextPK();
	}
	public String selectNextSEQPK() {
		return this.solicitudDAO.selectNextSEQPK();
	}

	public String abogadoMinSolxEstudioAfter(String horaCorte, String estudio) {
		return this.solicitudDAO.abogadoMinSolxEstudioAfter(horaCorte, estudio);
	}

	public String abogadoMinSolxEstudioBefore(String horaCorte, String estudio) {
		return this.solicitudDAO.abogadoMinSolxEstudioBefore(horaCorte, estudio);
	}

	public String estudioMinSolAfter(String horaCorte) {
		return this.solicitudDAO.estudioMinSolAfter(horaCorte);
	}

	public String estudioMinSolBefore(String horaCorte) {
		return this.solicitudDAO.estudioMinSolBefore(horaCorte);
	}
	
	public void insertSolicitudHistorico(Solicitud solicitud, HistSolicitud histSolicitud,List lista){
		this.solicitudDAO.insert(solicitud);
		this.histSolicitudDAO.insert(histSolicitud);
		for (Iterator iterator = lista.iterator(); iterator.hasNext();) {
			OperacionBancaria operacionBancaria = (OperacionBancaria) iterator.next();
			SolicitudOperBanKey record= new SolicitudOperBanKey();
			record.setCodOperBan(operacionBancaria.getCodOperBan());
			record.setCodSoli(solicitud.getCodSoli());
			this.solicitudOperBanDAO.insert(record);
		}	
	}
	
	public int updateByPrimaryKeySolicitud(Solicitud solicitud,List lista) {
		SolicitudOperBanKey key= new SolicitudOperBanKey();
		key.setCodSoli(solicitud.getCodSoli());
		int rows=this.solicitudOperBanDAO.deleteBySolicitud(key);
		System.out.println("Numero de registros eliminados SolicitudOperBan: "+rows);
		
		for (Iterator iterator = lista.iterator(); iterator.hasNext();) {
			OperacionBancaria object = (OperacionBancaria) iterator.next();
			SolicitudOperBanKey record = new SolicitudOperBanKey();
			record.setCodOperBan(object.getCodOperBan());
			record.setCodSoli(solicitud.getCodSoli());
			this.solicitudOperBanDAO.insert(record);
		}
		
		return this.solicitudDAO.updateByPrimaryKey(solicitud);
	}

}
